"""
@property 装饰器使得这个方法可以像访问属性一样被调用，而不需要使用括号。
@property 将方法转换为只读属性
@property_name.setter 允许设置属性值时进行验证
提供了类似属性访问的语法，但内部可以执行计算或验证逻辑
"""


class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        """获取半径"""
        return self._radius

    @radius.setter
    def radius(self, value):
        """设置半径，带验证"""
        if value < 0:
            raise ValueError("半径不能为负数")
        self._radius = value

    @property
    def area(self):
        """计算圆的面积"""
        return 3.14159 * self._radius ** 2


# 使用示例
circle = Circle(5)
print(circle.radius)  # 5
print(circle.area)  # 78.53975

circle.radius = 10
print(circle.radius)  # 10
